package componentes;

import java.awt.Color;
import java.awt.Graphics;

/**
 * 
 * Classe Alvo.java que representa o alvo que deverá ser atingido no jogo, este
 * nada mais é do que um retângulo que sobe e desce em relação ao chão
 * 
 * @desc Projeto BombarJ
 * @author Simone Carneiro Streitenberger 11888 CCO2003
 * @author Thiago Nascimento Comicio 11889 CCO2003
 * @professor Edison de Jesus
 * @disciplina Computação Gráfica 2 - CCO812
 * 
 */
public class Alvo {

	// tamanho atual do alvo
	private int tamanho;

	// tamanho inicial do alvo
	private int tamanhoInicial;

	// largura atual do alvo
	private int largura;

	// largura incial do alvo
	private int larguraInicial;

	// tamanho do painel indicando a pocição extrema do alvo
	private int tamPainel;

	// posição horizontal indicando a posição mais à esquerda do alvo
	private int x;

	// cor atual do alvo
	private Color cor;

	// indicação da direção do movimento do alvo
	private boolean descida;

	/**
	 * Construtor da classe Alvo.java
	 * 
	 * @param tamanho
	 *            Tamnanho do vertical alvo.
	 * @param largura
	 *            Tamanho horizontal do alvo.
	 * @param tamPainel
	 *            Tamanho do painel onde será pintado o alvo.
	 * @param x
	 *            Posição horizontal onde será colocado o alvo.
	 * @param cor
	 *            Cor do alvo.
	 */
	public Alvo(int tamanho, int largura, int tamPainel, int x, Color cor) {
		// setando as características inicias do alvo
		this.tamanhoInicial = tamanho;
		this.largura = this.larguraInicial = largura;
		this.tamPainel = tamPainel;
		this.x = x;
		this.cor = cor;

		// decide se o alvo começa descendo ou subindo
		if (Math.round(Math.random()) == 0) {
			descida = false;
		} else {
			descida = true;
		}

		// gera um valor randomico de tamanho
		this.tamanho = (int) Math.round(Math.random()
				* (double) this.tamanhoInicial);
	}

	/**
	 * 
	 * Método que tem por função pintar o alvo na tela
	 * 
	 * @param desenho
	 *            Objeto do painel onde será pintado o projétil.
	 * 
	 */
	public void pintaAlvo(Graphics desenho) {
		// verifica se o objeto gráfico existe
		if (desenho == null)
			return;

		// seta a cor do alvo
		desenho.setColor(cor);

		// imprime o alvo
		desenho.fillRect(x, tamPainel - tamanho, largura, tamanho);
	}

	/**
	 * 
	 * Método que retorna o valor do atributo descida.
	 * 
	 * @return O atributo descida.
	 * 
	 */
	public boolean isDescida() {
		return descida;
	}

	/**
	 * 
	 * Método que seta o atributo descida para um novo valor.
	 * 
	 * @param descida
	 *            O atributo descida é setado.
	 * 
	 */
	public void setDescida(boolean descida) {
		this.descida = descida;
	}

	/**
	 * 
	 * Método que retorna o valor do atributo cor.
	 * 
	 * @return O atributo cor.
	 * 
	 */
	public Color getCor() {
		return cor;
	}

	/**
	 * 
	 * Método que seta o atributo cor para um novo valor.
	 * 
	 * @param cor
	 *            O atributo cor é setado.
	 * 
	 */
	public void setCor(Color cor) {
		this.cor = cor;
	}

	/**
	 * 
	 * Método que retorna o valor do atributo largura.
	 * 
	 * @return O atributo largura.
	 * 
	 */
	public int getLargura() {
		return largura;
	}

	/**
	 * 
	 * Método que seta o atributo largura para um novo valor.
	 * 
	 * @param largura
	 *            O atributo largura é setado.
	 * 
	 */
	public void setLargura(int largura) {
		this.largura = largura;
	}

	/**
	 * 
	 * Método que retorna o valor do atributo tamanho.
	 * 
	 * @return O atributo tamanho.
	 * 
	 */
	public int getTamanho() {
		return tamanho;
	}

	/**
	 * 
	 * Método que seta o atributo tamanho para um novo valor.
	 * 
	 * @param tamanho
	 *            O atributo tamanho é setado.
	 * 
	 */
	public void setTamanho(int tamanho) {
		this.tamanho = tamanho;
	}

	/**
	 * 
	 * Método que retorna o valor do atributo tamPainel.
	 * 
	 * @return O atributo tamPainel.
	 * 
	 */
	public int getTamPainel() {
		return tamPainel;
	}

	/**
	 * 
	 * Método que seta o atributo tamPainel para um novo valor.
	 * 
	 * @param tamPainel
	 *            O atributo tamPainel é setado.
	 * 
	 */
	public void setTamPainel(int tamPainel) {
		this.tamPainel = tamPainel;
	}

	/**
	 * 
	 * Método que retorna o valor do atributo x.
	 * 
	 * @return O atributo x.
	 * 
	 */
	public int getX() {
		return x;
	}

	/**
	 * 
	 * Método que seta o atributo x para um novo valor.
	 * 
	 * @param x
	 *            O atributo x é setado.
	 * 
	 */
	public void setX(int x) {
		this.x = x;
	}

	/**
	 * 
	 * Método que retorna o valor do atributo larguraInicial.
	 * 
	 * @return O atributo larguraInicial.
	 * 
	 */
	public int getLarguraInicial() {
		return larguraInicial;
	}

	/**
	 * 
	 * Método que retorna o valor do atributo tamanhoInicial.
	 * 
	 * @return O atributo tamanhoInicial.
	 * 
	 */
	public int getTamanhoInicial() {
		return tamanhoInicial;
	}

}
